package manage

import (
	"fmt"
	"github.com/jinzhu/copier"
	"github.com/ouqiang/gocron/internal/models"
	"github.com/ouqiang/gocron/internal/modules/utils"
	"gopkg.in/macaron.v1"
	"strings"
	"time"
)

type MenuParams struct {
	Component  string    `json:"component"`
	CreateBy   string    `json:"create_by"`
	CreateTime time.Time `json:"create_time"`
	Icon       string    `json:"icon"`
	IsCache    int       `json:"is_cache"`
	IsFrame    string    `json:"is_frame"`
	MenuID     int       `json:"menu_id"`
	MenuName   string    `json:"menu_name"`
	MenuType   string    `json:"menu_type"`
	OrderNum   int       `json:"order_num"`
	ParentID   int       `json:"parent_id"`
	Path       string    `json:"path"`
	Perms      string    `json:"perms"`
	Query      string    `json:"query"`
	Remark     string    `json:"remark"`
	Status     string    `json:"status"`
	UpdateBy   string    `json:"update_by"`
	UpdateTime time.Time `json:"update_time"`
	Visible    string    `json:"visible"`
}

func List(ctx *macaron.Context) string {
	queryParams := models.CommonMap{}
	queryParams["menuName"] = ctx.QueryTrim("menuName")
	queryParams["status"] = ctx.QueryTrim("status")

	fmt.Println(queryParams)
	// 获取菜单数据
	menuModel := new(models.SysMenu)
	list, err := menuModel.GetAllMenu(queryParams)
	json := utils.JsonResponse{}
	if err != nil {
		fmt.Println(err)
		return json.CommonFailure("获取菜单失败:")
	}
	jsonResp := utils.JsonResponse{}
	return jsonResp.Success(utils.SuccessContent, map[string]interface{}{
		"list": list,
	})
}

func GetMenu(ctx *macaron.Context) string {
	id := ctx.ParamsInt(":id")
	sysMenu := new(models.SysMenu)
	err := sysMenu.Find(id)
	json := utils.JsonResponse{}
	if err != nil {
		fmt.Println(err)
		return json.CommonFailure("获取菜单失败:")
	}
	jsonResp := utils.JsonResponse{}
	return jsonResp.Success(utils.SuccessContent, sysMenu)
}

func Store(ctx *macaron.Context, params MenuParams) string {
	params.MenuName = strings.TrimSpace(params.MenuName)
	params.Path = strings.TrimSpace(params.Path)
	params.Component = strings.TrimSpace(params.Component)
	params.Perms = strings.TrimSpace(params.Perms)
	params.Query = strings.TrimSpace(params.Query)
	json := utils.JsonResponse{}

	if params.MenuID > 0 && params.MenuID < 2000 {
		// 禁止修改2000以内菜单
		return json.CommonFailure("禁止修改系统默认菜单")
	}
	sysMenu := models.SysMenu{}
	isExist, err := sysMenu.NameExists(params.MenuName, params.MenuID)

	if err != nil {
		return json.CommonFailure(utils.FailureContent, err)
	}
	if isExist > 0 {
		return json.CommonFailure("菜单名称已存在")
	}
	username, _ := ctx.Data["username"]
	err = copier.Copy(&sysMenu, &params)
	if err != nil {
		return json.CommonFailure(utils.FailureContent, err)
	}

	if params.MenuID > 0 {
		fmt.Println(sysMenu.Icon)
		//updateMap := models.CommonMap{}
		sysMenu.UpdateBy, _ = username.(string)
		sysMenu.UpdateTime = time.Now()
		sysMenu.Update(params.MenuID)
	} else {
		sysMenu.CreateBy, _ = username.(string)
		sysMenu.CreateTime = time.Now()
		var emptyTime time.Time
		sysMenu.UpdateTime = emptyTime
		sysMenu.Create()

	}
	return json.Success("保存成功", nil)
}

func Delete(ctx *macaron.Context) string {
	id := ctx.ParamsInt(":id")
	jsonResp := utils.JsonResponse{}
	// 禁止删除2000以内菜单
	if id < 2000 {
		return jsonResp.CommonFailure("禁止删除系统默认菜单")
	}
	sysMenu := new(models.SysMenu)

	_, err := sysMenu.Delete(id)

	if err != nil {
		return jsonResp.CommonFailure(utils.FailureContent, err)
	}
	return jsonResp.Success(utils.SuccessContent, sysMenu)
}
